在開發過程中,驗證參數是必須的,以前前輩有教過,欄位必填或有數值限制盡量在前端 js 就直接擋掉,不要等進到後端(WebForm年代),然而這個概念我覺得跟後來 ModelState.IsValid
很相似,我們會在進入 Controller 第一步就驗證模型是否符合我們設定的格式(必填/區間....),本篇就用 API 來作範例。
我們先建立一個 ProductsController
[Route("api/[controller]")]
[ApiController]
public class ProductsController : ControllerBase
{
[HttpPost]
public IActionResult Post(Product product)
{
if (ModelState.IsValid)
{
//驗證通過後可執行的方法寫此
return Ok(product);
}
else
{
return BadRequest();
}
}
}
上面的 Post 方法會接收一個 Product 的 Model,以下是定義這個 Model 每個參數的驗證
若違反以上兩個其中一個條件則會回傳 Status Code 400,並且連 ErrorMessage 一併回傳。
public class Product
{
public int Id { get; set; }
[Required(ErrorMessage ="請輸入名稱")]
public string Name { get; set; }
public decimal Price { get; set; }
[Range(0, 999 ,ErrorMessage = "重量介於0~999之間")]
public double Weight { get; set; }
}
Name 屬性未輸入
Weight 超過 999
除了 [Required]
、[Range]
還有其他屬性可以使用,可參考官方文章